package com.ganzalang.gmall.learning.netty.nio;

import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @description: MappedByteBuffer可以让文件直接在内存（对外内存）修改，操作系统不需要再拷贝一次
 * @author: Ganzalang
 * @Date 2021/7/13 9:37
 */
public class MappedByteBufferTest {

    public static void main(String[] args) throws Exception {
        RandomAccessFile randomAccessFile = new RandomAccessFile("D:\\IDEAProject\\gmall-learning\\gmall-learning-netty\\1.txt", "rw");
        // 获取对应的通道
        FileChannel channel = randomAccessFile.getChannel();
        /**
         * 参数：
         * 1. 使用读写模式
         * 2. 可直接修改的起始位置
         * 3. 映射到内存中的大小，即将1.txt的多少个字节映射到内存，此处值为5，表示可直接修改的范围是0-4
         * MappedByteBuffer的实际类型是 DirectByteBuffer
         */
        MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        mappedByteBuffer.put(0, (byte)'2');
        mappedByteBuffer.put(3, (byte)'A');

        randomAccessFile.close();
    }
}
